package com.edu.proxy.dynamicproxy;

import java.lang.reflect.InvocationHandler;

public class SimulatorProxy implements Simulator{

	// 调用处理器对象的引用
    protected InvocationHandler handler; 
     
    // 以调用处理器为参数的构造函数
    public SimulatorProxy(InvocationHandler handler){ 
        this.handler = handler; 
    } 
    
	@Override
	public short simulate(int arg1, long arg2, String arg3) {
		// 第一步是获取 simulate 方法的 Method 对象
        java.lang.reflect.Method method = null; 
        try{ 
            method = Simulator.class.getMethod( 
                "simulate", 
                new Class[] {int.class, long.class, String.class} );
        } catch(Exception e) { 
            // 异常处理 1（略）
        } 
         
        // 第二步是调用 handler 的 invoke 方法分派转发方法调用
        Object r = null; 
        try { 
            r = handler.invoke(this, 
                method, 
                // 对于原始类型参数需要进行装箱操作
                new Object[] {new Integer(arg1), new Long(arg2), arg3});
        }catch(Throwable e) { 
            // 异常处理 2（略）
        } 
        // 第三步是返回结果（返回类型是原始类型则需要进行拆箱操作）
        return ((Short)r).shortValue();
	}
	
}
